<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::people::HeadBasedSubclustering&lt; PointT &gt; 模板类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1people_1_1_head_based_subclustering.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-types">Public 类型</a> &#124;
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pro-attribs">Protected 属性</a> &#124;
<a href="classpcl_1_1people_1_1_head_based_subclustering-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::people::HeadBasedSubclustering&lt; PointT &gt; 模板类 参考</div>  </div>
</div><!--header-->
<div class="contents">

<p><b><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html" title="HeadBasedSubclustering represents a class for searching for people inside a HeightMap2D based on a 3D...">HeadBasedSubclustering</a></b> represents a class for searching for people inside a <a class="el" href="classpcl_1_1people_1_1_height_map2_d.html" title="HeightMap2D represents a class for creating a 2D height map from a point cloud and searching for its ...">HeightMap2D</a> based on a 3D head detection algorithm  
 <a href="classpcl_1_1people_1_1_head_based_subclustering.html#details">更多...</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public 类型</h2></td></tr>
<tr class="memitem:a229a0cead4957f9f964e0b73fabd5329"><td class="memItemLeft" align="right" valign="top"><a id="a229a0cead4957f9f964e0b73fabd5329"></a>
typedef <a class="el" href="classpcl_1_1_point_cloud.html">pcl::PointCloud</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloud</b></td></tr>
<tr class="separator:a229a0cead4957f9f964e0b73fabd5329"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d264852fc9e236d62fd85c07ef4d819"><td class="memItemLeft" align="right" valign="top"><a id="a7d264852fc9e236d62fd85c07ef4d819"></a>
typedef boost::shared_ptr&lt; <a class="el" href="classpcl_1_1_point_cloud.html">PointCloud</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudPtr</b></td></tr>
<tr class="separator:a7d264852fc9e236d62fd85c07ef4d819"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae32501c8311a448d69dfcfa98cbc5d1b"><td class="memItemLeft" align="right" valign="top"><a id="ae32501c8311a448d69dfcfa98cbc5d1b"></a>
typedef boost::shared_ptr&lt; const <a class="el" href="classpcl_1_1_point_cloud.html">PointCloud</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><b>PointCloudConstPtr</b></td></tr>
<tr class="separator:ae32501c8311a448d69dfcfa98cbc5d1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:ad10dde3752cb16cf7208d64a3396ef42"><td class="memItemLeft" align="right" valign="top"><a id="ad10dde3752cb16cf7208d64a3396ef42"></a>
&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#ad10dde3752cb16cf7208d64a3396ef42">HeadBasedSubclustering</a> ()</td></tr>
<tr class="memdesc:ad10dde3752cb16cf7208d64a3396ef42"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <br /></td></tr>
<tr class="separator:ad10dde3752cb16cf7208d64a3396ef42"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d34a7bc094d9b0478c05304ebb84221"><td class="memItemLeft" align="right" valign="top"><a id="a2d34a7bc094d9b0478c05304ebb84221"></a>
virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a2d34a7bc094d9b0478c05304ebb84221">~HeadBasedSubclustering</a> ()</td></tr>
<tr class="memdesc:a2d34a7bc094d9b0478c05304ebb84221"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor. <br /></td></tr>
<tr class="separator:a2d34a7bc094d9b0478c05304ebb84221"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a37e1d9543f43fc7c59fe3a795d01388e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a37e1d9543f43fc7c59fe3a795d01388e">subcluster</a> (std::vector&lt; <a class="el" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &gt; &amp;clusters)</td></tr>
<tr class="memdesc:a37e1d9543f43fc7c59fe3a795d01388e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute subclusters and return them into a vector of <a class="el" href="classpcl_1_1people_1_1_person_cluster.html" title="PersonCluster represents a class for representing information about a cluster containing a person.">PersonCluster</a>.  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#a37e1d9543f43fc7c59fe3a795d01388e">更多...</a><br /></td></tr>
<tr class="separator:a37e1d9543f43fc7c59fe3a795d01388e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a694972594161a1d257c6131f8f0d406d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a694972594161a1d257c6131f8f0d406d">mergeClustersCloseInFloorCoordinates</a> (std::vector&lt; <a class="el" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &gt; &amp;input_clusters, std::vector&lt; <a class="el" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &gt; &amp;output_clusters)</td></tr>
<tr class="memdesc:a694972594161a1d257c6131f8f0d406d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Merge clusters close in floor coordinates.  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#a694972594161a1d257c6131f8f0d406d">更多...</a><br /></td></tr>
<tr class="separator:a694972594161a1d257c6131f8f0d406d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acdaf7000869d27494d9e1a5573e2cb49"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#acdaf7000869d27494d9e1a5573e2cb49">createSubClusters</a> (<a class="el" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;cluster, int maxima_number_after_filtering, std::vector&lt; int &gt; &amp;maxima_cloud_indices_filtered, std::vector&lt; <a class="el" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &gt; &amp;subclusters)</td></tr>
<tr class="memdesc:acdaf7000869d27494d9e1a5573e2cb49"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create subclusters centered on the heads position from the current cluster.  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#acdaf7000869d27494d9e1a5573e2cb49">更多...</a><br /></td></tr>
<tr class="separator:acdaf7000869d27494d9e1a5573e2cb49"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad140bf587d64742ccf80863a31420584"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#ad140bf587d64742ccf80863a31420584">setInputCloud</a> (PointCloudPtr &amp;cloud)</td></tr>
<tr class="memdesc:ad140bf587d64742ccf80863a31420584"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set input cloud.  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#ad140bf587d64742ccf80863a31420584">更多...</a><br /></td></tr>
<tr class="separator:ad140bf587d64742ccf80863a31420584"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a041e2143e796e359353c798f16f8be8d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a041e2143e796e359353c798f16f8be8d">setGround</a> (Eigen::VectorXf &amp;ground_coeffs)</td></tr>
<tr class="memdesc:a041e2143e796e359353c798f16f8be8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set the ground coefficients.  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#a041e2143e796e359353c798f16f8be8d">更多...</a><br /></td></tr>
<tr class="separator:a041e2143e796e359353c798f16f8be8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa397dfa3d093b2a9f86b3957513b9d94"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#aa397dfa3d093b2a9f86b3957513b9d94">setSensorPortraitOrientation</a> (bool vertical)</td></tr>
<tr class="memdesc:aa397dfa3d093b2a9f86b3957513b9d94"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set sensor orientation to landscape mode (false) or portrait mode (true).  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#aa397dfa3d093b2a9f86b3957513b9d94">更多...</a><br /></td></tr>
<tr class="separator:aa397dfa3d093b2a9f86b3957513b9d94"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ffdbb2c984800cf6c30e42547e31c22"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a2ffdbb2c984800cf6c30e42547e31c22">setHeadCentroid</a> (bool head_centroid)</td></tr>
<tr class="memdesc:a2ffdbb2c984800cf6c30e42547e31c22"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set head_centroid_ to true (person centroid is in the head) or false (person centroid is the whole body centroid).  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#a2ffdbb2c984800cf6c30e42547e31c22">更多...</a><br /></td></tr>
<tr class="separator:a2ffdbb2c984800cf6c30e42547e31c22"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84a55359a8ff3af4b51d663a4c017f45"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a84a55359a8ff3af4b51d663a4c017f45">setInitialClusters</a> (std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;cluster_indices)</td></tr>
<tr class="memdesc:a84a55359a8ff3af4b51d663a4c017f45"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set initial cluster indices.  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#a84a55359a8ff3af4b51d663a4c017f45">更多...</a><br /></td></tr>
<tr class="separator:a84a55359a8ff3af4b51d663a4c017f45"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abb32cbb48acaa44cd04ec25508e56ca9"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#abb32cbb48acaa44cd04ec25508e56ca9">setHeightLimits</a> (float min_height, float max_height)</td></tr>
<tr class="memdesc:abb32cbb48acaa44cd04ec25508e56ca9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set minimum and maximum allowed height for a person cluster.  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#abb32cbb48acaa44cd04ec25508e56ca9">更多...</a><br /></td></tr>
<tr class="separator:abb32cbb48acaa44cd04ec25508e56ca9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18856961bd00689c06e52384756d7a52"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a18856961bd00689c06e52384756d7a52">setDimensionLimits</a> (int min_points, int max_points)</td></tr>
<tr class="memdesc:a18856961bd00689c06e52384756d7a52"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set minimum and maximum allowed number of points for a person cluster.  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#a18856961bd00689c06e52384756d7a52">更多...</a><br /></td></tr>
<tr class="separator:a18856961bd00689c06e52384756d7a52"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a866c04c3f4cd3c955a5217a4684ea36b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a866c04c3f4cd3c955a5217a4684ea36b">setMinimumDistanceBetweenHeads</a> (float heads_minimum_distance)</td></tr>
<tr class="memdesc:a866c04c3f4cd3c955a5217a4684ea36b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set minimum distance between persons' heads.  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#a866c04c3f4cd3c955a5217a4684ea36b">更多...</a><br /></td></tr>
<tr class="separator:a866c04c3f4cd3c955a5217a4684ea36b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a72bf26052718ca4445c2fc61db95abcb"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a72bf26052718ca4445c2fc61db95abcb">getHeightLimits</a> (float &amp;min_height, float &amp;max_height)</td></tr>
<tr class="memdesc:a72bf26052718ca4445c2fc61db95abcb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get minimum and maximum allowed height for a person cluster.  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#a72bf26052718ca4445c2fc61db95abcb">更多...</a><br /></td></tr>
<tr class="separator:a72bf26052718ca4445c2fc61db95abcb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a87260d7a10529ea79d69fbf35582498e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a87260d7a10529ea79d69fbf35582498e">getDimensionLimits</a> (int &amp;min_points, int &amp;max_points)</td></tr>
<tr class="memdesc:a87260d7a10529ea79d69fbf35582498e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get minimum and maximum allowed number of points for a person cluster.  <a href="classpcl_1_1people_1_1_head_based_subclustering.html#a87260d7a10529ea79d69fbf35582498e">更多...</a><br /></td></tr>
<tr class="separator:a87260d7a10529ea79d69fbf35582498e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa2bcef17ac77f0b271a0abe9d0088658"><td class="memItemLeft" align="right" valign="top"><a id="aa2bcef17ac77f0b271a0abe9d0088658"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#aa2bcef17ac77f0b271a0abe9d0088658">getMinimumDistanceBetweenHeads</a> ()</td></tr>
<tr class="memdesc:aa2bcef17ac77f0b271a0abe9d0088658"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get minimum distance between persons' heads. <br /></td></tr>
<tr class="separator:aa2bcef17ac77f0b271a0abe9d0088658"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected 属性</h2></td></tr>
<tr class="memitem:a6d901849a17c155e7d31bf8c7f9f93fa"><td class="memItemLeft" align="right" valign="top"><a id="a6d901849a17c155e7d31bf8c7f9f93fa"></a>
Eigen::VectorXf&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6d901849a17c155e7d31bf8c7f9f93fa">ground_coeffs_</a></td></tr>
<tr class="memdesc:a6d901849a17c155e7d31bf8c7f9f93fa"><td class="mdescLeft">&#160;</td><td class="mdescRight">ground plane coefficients <br /></td></tr>
<tr class="separator:a6d901849a17c155e7d31bf8c7f9f93fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac2de0af08516755f8f5f304269e15f62"><td class="memItemLeft" align="right" valign="top"><a id="ac2de0af08516755f8f5f304269e15f62"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac2de0af08516755f8f5f304269e15f62">sqrt_ground_coeffs_</a></td></tr>
<tr class="memdesc:ac2de0af08516755f8f5f304269e15f62"><td class="mdescLeft">&#160;</td><td class="mdescRight">ground plane normalization factor <br /></td></tr>
<tr class="separator:ac2de0af08516755f8f5f304269e15f62"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a178c2cc808a240a4deaadf1d520f5231"><td class="memItemLeft" align="right" valign="top"><a id="a178c2cc808a240a4deaadf1d520f5231"></a>
std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a178c2cc808a240a4deaadf1d520f5231">cluster_indices_</a></td></tr>
<tr class="memdesc:a178c2cc808a240a4deaadf1d520f5231"><td class="mdescLeft">&#160;</td><td class="mdescRight">initial clusters indices <br /></td></tr>
<tr class="separator:a178c2cc808a240a4deaadf1d520f5231"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6b8c41b022b2e20451ba90374054ca6c"><td class="memItemLeft" align="right" valign="top"><a id="a6b8c41b022b2e20451ba90374054ca6c"></a>
PointCloudPtr&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6b8c41b022b2e20451ba90374054ca6c">cloud_</a></td></tr>
<tr class="memdesc:a6b8c41b022b2e20451ba90374054ca6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">pointer to the input cloud <br /></td></tr>
<tr class="separator:a6b8c41b022b2e20451ba90374054ca6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac4575bf3342cb50d3e6706b5ee5b9954"><td class="memItemLeft" align="right" valign="top"><a id="ac4575bf3342cb50d3e6706b5ee5b9954"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac4575bf3342cb50d3e6706b5ee5b9954">max_height_</a></td></tr>
<tr class="memdesc:ac4575bf3342cb50d3e6706b5ee5b9954"><td class="mdescLeft">&#160;</td><td class="mdescRight">person clusters maximum height from the ground plane <br /></td></tr>
<tr class="separator:ac4575bf3342cb50d3e6706b5ee5b9954"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5399168b9df777674d31fef1e28b538f"><td class="memItemLeft" align="right" valign="top"><a id="a5399168b9df777674d31fef1e28b538f"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a5399168b9df777674d31fef1e28b538f">min_height_</a></td></tr>
<tr class="memdesc:a5399168b9df777674d31fef1e28b538f"><td class="mdescLeft">&#160;</td><td class="mdescRight">person clusters minimum height from the ground plane <br /></td></tr>
<tr class="separator:a5399168b9df777674d31fef1e28b538f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0fbe5799f011ea769c2070c99a0c666c"><td class="memItemLeft" align="right" valign="top"><a id="a0fbe5799f011ea769c2070c99a0c666c"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a0fbe5799f011ea769c2070c99a0c666c">vertical_</a></td></tr>
<tr class="memdesc:a0fbe5799f011ea769c2070c99a0c666c"><td class="mdescLeft">&#160;</td><td class="mdescRight">if true, the sensor is considered to be vertically placed (portrait mode) <br /></td></tr>
<tr class="separator:a0fbe5799f011ea769c2070c99a0c666c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3cc53307aaca3043c210a89f0d17f032"><td class="memItemLeft" align="right" valign="top"><a id="a3cc53307aaca3043c210a89f0d17f032"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#a3cc53307aaca3043c210a89f0d17f032">head_centroid_</a></td></tr>
<tr class="memdesc:a3cc53307aaca3043c210a89f0d17f032"><td class="mdescLeft">&#160;</td><td class="mdescRight">if true, the person centroid is computed as the centroid of the cluster points belonging to the head if false, the person centroid is computed as the centroid of the whole cluster points (default = true) <br /></td></tr>
<tr class="separator:a3cc53307aaca3043c210a89f0d17f032"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac43989104e222a541c69e09673eab3ca"><td class="memItemLeft" align="right" valign="top"><a id="ac43989104e222a541c69e09673eab3ca"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac43989104e222a541c69e09673eab3ca">max_points_</a></td></tr>
<tr class="memdesc:ac43989104e222a541c69e09673eab3ca"><td class="mdescLeft">&#160;</td><td class="mdescRight">maximum number of points for a person cluster <br /></td></tr>
<tr class="separator:ac43989104e222a541c69e09673eab3ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaac17fa63ed4bba8eac338c30d05407f"><td class="memItemLeft" align="right" valign="top"><a id="aaac17fa63ed4bba8eac338c30d05407f"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#aaac17fa63ed4bba8eac338c30d05407f">min_points_</a></td></tr>
<tr class="memdesc:aaac17fa63ed4bba8eac338c30d05407f"><td class="mdescLeft">&#160;</td><td class="mdescRight">minimum number of points for a person cluster <br /></td></tr>
<tr class="separator:aaac17fa63ed4bba8eac338c30d05407f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acdeeb51c8793c204939401f3cc11fbef"><td class="memItemLeft" align="right" valign="top"><a id="acdeeb51c8793c204939401f3cc11fbef"></a>
float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html#acdeeb51c8793c204939401f3cc11fbef">heads_minimum_distance_</a></td></tr>
<tr class="memdesc:acdeeb51c8793c204939401f3cc11fbef"><td class="mdescLeft">&#160;</td><td class="mdescRight">minimum distance between persons' heads <br /></td></tr>
<tr class="separator:acdeeb51c8793c204939401f3cc11fbef"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><h3>template&lt;typename PointT&gt;<br />
class pcl::people::HeadBasedSubclustering&lt; PointT &gt;</h3>

<p><b><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html" title="HeadBasedSubclustering represents a class for searching for people inside a HeightMap2D based on a 3D...">HeadBasedSubclustering</a></b> represents a class for searching for people inside a <a class="el" href="classpcl_1_1people_1_1_height_map2_d.html" title="HeightMap2D represents a class for creating a 2D height map from a point cloud and searching for its ...">HeightMap2D</a> based on a 3D head detection algorithm </p>
<dl class="section author"><dt>作者</dt><dd>Matteo Munaro </dd></dl>
</div><h2 class="groupheader">成员函数说明</h2>
<a id="acdaf7000869d27494d9e1a5573e2cb49"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acdaf7000869d27494d9e1a5573e2cb49">&#9670;&nbsp;</a></span>createSubClusters()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::createSubClusters </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cluster</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>maxima_number_after_filtering</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; int &gt; &amp;&#160;</td>
          <td class="paramname"><em>maxima_cloud_indices_filtered</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; <a class="el" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>subclusters</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Create subclusters centered on the heads position from the current cluster. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cluster</td><td>A <a class="el" href="classpcl_1_1people_1_1_person_cluster.html" title="PersonCluster represents a class for representing information about a cluster containing a person.">PersonCluster</a>. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">maxima_number_after_filtering</td><td>Number of local maxima to use as centers of the new cluster. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">maxima_cloud_indices_filtered</td><td><a class="el" href="class_cloud.html" title="A wrapper which allows to use any implementation of cloud provided by a third-party library.">Cloud</a> indices of local maxima to use as centers of the new cluster. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">subclusters</td><td>Output vector of <a class="el" href="classpcl_1_1people_1_1_person_cluster.html" title="PersonCluster represents a class for representing information about a cluster containing a person.">PersonCluster</a> objects derived from the input cluster. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;{</div>
<div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;  <span class="comment">// create new clusters from the current cluster and put corresponding indices into sub_clusters_indices:</span></div>
<div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;  <span class="keywordtype">float</span> normalize_factor = std::pow(<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac2de0af08516755f8f5f304269e15f62">sqrt_ground_coeffs_</a>, 2);          <span class="comment">// sqrt_ground_coeffs ^ 2 (precomputed for speed)</span></div>
<div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;  Eigen::Vector3f head_ground_coeffs = <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6d901849a17c155e7d31bf8c7f9f93fa">ground_coeffs_</a>.head(3);        <span class="comment">// ground plane normal (precomputed for speed)</span></div>
<div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;  Eigen::Matrix3Xf maxima_projected(3,maxima_number);                 <span class="comment">// matrix containing the projection of maxima onto the ground plane</span></div>
<div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;  Eigen::VectorXi subclusters_number_of_points(maxima_number);        <span class="comment">// subclusters number of points</span></div>
<div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;  std::vector &lt;std::vector &lt;int&gt; &gt; sub_clusters_indices;              <span class="comment">// vector of vectors with the cluster indices for every maximum</span></div>
<div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;  sub_clusters_indices.resize(maxima_number);                         <span class="comment">// resize to number of maxima</span></div>
<div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160; </div>
<div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;  <span class="comment">// Project maxima on the ground plane:</span></div>
<div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;  <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; maxima_number; i++)                              <span class="comment">// for every maximum</span></div>
<div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;  {</div>
<div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* current_point = &amp;<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6b8c41b022b2e20451ba90374054ca6c">cloud_</a>-&gt;points[maxima_cloud_indices[i]]; <span class="comment">// current maximum point cloud point</span></div>
<div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    Eigen::Vector3f p_current_eigen(current_point-&gt;x, current_point-&gt;y, current_point-&gt;z);  <span class="comment">// conversion to eigen</span></div>
<div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <span class="keywordtype">float</span> t = p_current_eigen.dot(head_ground_coeffs) / normalize_factor;       <span class="comment">// height from the ground</span></div>
<div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    maxima_projected.col(i).matrix () = p_current_eigen - head_ground_coeffs * t;         <span class="comment">// projection of the point on the groundplane</span></div>
<div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    subclusters_number_of_points(i) = 0;                              <span class="comment">// intialize number of points</span></div>
<div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;  }</div>
<div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160; </div>
<div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;  <span class="comment">// Associate cluster points to one of the maximum:</span></div>
<div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;  <span class="keywordflow">for</span>(std::vector&lt;int&gt;::const_iterator points_iterator = cluster.<a class="code" href="classpcl_1_1people_1_1_person_cluster.html#a317c12f4ab80b0bc52e417a781680d34">getIndices</a>().indices.begin(); points_iterator != cluster.<a class="code" href="classpcl_1_1people_1_1_person_cluster.html#a317c12f4ab80b0bc52e417a781680d34">getIndices</a>().indices.end(); points_iterator++)</div>
<div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;  {</div>
<div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    <a class="code" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a>* current_point = &amp;<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6b8c41b022b2e20451ba90374054ca6c">cloud_</a>-&gt;points[*points_iterator];        <span class="comment">// current point cloud point</span></div>
<div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    Eigen::Vector3f p_current_eigen(current_point-&gt;x, current_point-&gt;y, current_point-&gt;z);  <span class="comment">// conversion to eigen</span></div>
<div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    <span class="keywordtype">float</span> t = p_current_eigen.dot(head_ground_coeffs) / normalize_factor;       <span class="comment">// height from the ground</span></div>
<div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    p_current_eigen = p_current_eigen - head_ground_coeffs * t;       <span class="comment">// projection of the point on the groundplane</span></div>
<div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160; </div>
<div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    <span class="keywordtype">int</span> i = 0;</div>
<div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <span class="keywordtype">bool</span> correspondence_detected = <span class="keyword">false</span>;</div>
<div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <span class="keywordflow">while</span> ((!correspondence_detected) &amp;&amp; (i &lt; maxima_number))</div>
<div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    {</div>
<div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;      <span class="keywordflow">if</span> (((p_current_eigen - maxima_projected.col(i)).norm()) &lt; <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#acdeeb51c8793c204939401f3cc11fbef">heads_minimum_distance_</a>)</div>
<div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;      {</div>
<div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;        correspondence_detected = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        sub_clusters_indices[i].push_back(*points_iterator);</div>
<div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;        subclusters_number_of_points(i)++;</div>
<div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;      }</div>
<div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;      <span class="keywordflow">else</span></div>
<div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        i++;</div>
<div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    }</div>
<div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;  }</div>
<div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160; </div>
<div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;  <span class="comment">// Create a subcluster if the number of points associated to a maximum is over a threshold:</span></div>
<div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;  <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; maxima_number; i++)                              <span class="comment">// for every maximum</span></div>
<div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;  {</div>
<div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <span class="keywordflow">if</span> (subclusters_number_of_points(i) &gt; <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#aaac17fa63ed4bba8eac338c30d05407f">min_points_</a>)</div>
<div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    {</div>
<div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;      <a class="code" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> point_indices;</div>
<div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;      point_indices.indices = sub_clusters_indices[i];                <span class="comment">// indices associated to the i-th maximum</span></div>
<div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160; </div>
<div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;      <a class="code" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster&lt;PointT&gt;</a> cluster(<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6b8c41b022b2e20451ba90374054ca6c">cloud_</a>, point_indices, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6d901849a17c155e7d31bf8c7f9f93fa">ground_coeffs_</a>, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac2de0af08516755f8f5f304269e15f62">sqrt_ground_coeffs_</a>, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a3cc53307aaca3043c210a89f0d17f032">head_centroid_</a>, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a0fbe5799f011ea769c2070c99a0c666c">vertical_</a>);</div>
<div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;      subclusters.push_back(cluster);</div>
<div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;      <span class="comment">//std::cout &lt;&lt; &quot;Cluster number of points: &quot; &lt;&lt; subclusters_number_of_points(i) &lt;&lt; std::endl;</span></div>
<div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    }</div>
<div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;  }</div>
<div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_a0fbe5799f011ea769c2070c99a0c666c"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#a0fbe5799f011ea769c2070c99a0c666c">pcl::people::HeadBasedSubclustering::vertical_</a></div><div class="ttdeci">bool vertical_</div><div class="ttdoc">if true, the sensor is considered to be vertically placed (portrait mode)</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.h:213</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_a3cc53307aaca3043c210a89f0d17f032"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#a3cc53307aaca3043c210a89f0d17f032">pcl::people::HeadBasedSubclustering::head_centroid_</a></div><div class="ttdeci">bool head_centroid_</div><div class="ttdoc">if true, the person centroid is computed as the centroid of the cluster points belonging to the head ...</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.h:217</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_a6b8c41b022b2e20451ba90374054ca6c"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#a6b8c41b022b2e20451ba90374054ca6c">pcl::people::HeadBasedSubclustering::cloud_</a></div><div class="ttdeci">PointCloudPtr cloud_</div><div class="ttdoc">pointer to the input cloud</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.h:204</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_a6d901849a17c155e7d31bf8c7f9f93fa"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#a6d901849a17c155e7d31bf8c7f9f93fa">pcl::people::HeadBasedSubclustering::ground_coeffs_</a></div><div class="ttdeci">Eigen::VectorXf ground_coeffs_</div><div class="ttdoc">ground plane coefficients</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.h:195</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_aaac17fa63ed4bba8eac338c30d05407f"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#aaac17fa63ed4bba8eac338c30d05407f">pcl::people::HeadBasedSubclustering::min_points_</a></div><div class="ttdeci">int min_points_</div><div class="ttdoc">minimum number of points for a person cluster</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.h:223</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_ac2de0af08516755f8f5f304269e15f62"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#ac2de0af08516755f8f5f304269e15f62">pcl::people::HeadBasedSubclustering::sqrt_ground_coeffs_</a></div><div class="ttdeci">float sqrt_ground_coeffs_</div><div class="ttdoc">ground plane normalization factor</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.h:198</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_acdeeb51c8793c204939401f3cc11fbef"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#acdeeb51c8793c204939401f3cc11fbef">pcl::people::HeadBasedSubclustering::heads_minimum_distance_</a></div><div class="ttdeci">float heads_minimum_distance_</div><div class="ttdoc">minimum distance between persons' heads</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.h:226</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_person_cluster_html"><div class="ttname"><a href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster</a></div><div class="ttdoc">PersonCluster represents a class for representing information about a cluster containing a person.</div><div class="ttdef"><b>Definition:</b> person_cluster.h:60</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_person_cluster_html_a317c12f4ab80b0bc52e417a781680d34"><div class="ttname"><a href="classpcl_1_1people_1_1_person_cluster.html#a317c12f4ab80b0bc52e417a781680d34">pcl::people::PersonCluster::getIndices</a></div><div class="ttdeci">pcl::PointIndices &amp; getIndices()</div><div class="ttdoc">Returns the indices of the point cloud points corresponding to the cluster.</div><div class="ttdef"><b>Definition:</b> person_cluster.hpp:255</div></div>
<div class="ttc" id="astructpcl_1_1_point_indices_html"><div class="ttname"><a href="structpcl_1_1_point_indices.html">pcl::PointIndices</a></div><div class="ttdef"><b>Definition:</b> PointIndices.h:13</div></div>
<div class="ttc" id="astructpcl_1_1_point_x_y_z_r_g_b_a_html"><div class="ttname"><a href="structpcl_1_1_point_x_y_z_r_g_b_a.html">pcl::PointXYZRGBA</a></div><div class="ttdoc">A point structure representing Euclidean xyz coordinates, and the RGBA color.</div><div class="ttdef"><b>Definition:</b> point_types.hpp:540</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a87260d7a10529ea79d69fbf35582498e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a87260d7a10529ea79d69fbf35582498e">&#9670;&nbsp;</a></span>getDimensionLimits()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getDimensionLimits </td>
          <td>(</td>
          <td class="paramtype">int &amp;&#160;</td>
          <td class="paramname"><em>min_points</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int &amp;&#160;</td>
          <td class="paramname"><em>max_points</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get minimum and maximum allowed number of points for a person cluster. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">min_points</td><td>Minimum allowed number of points for a person cluster. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">max_points</td><td>Maximum allowed number of points for a person cluster. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;{</div>
<div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;  min_points = <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#aaac17fa63ed4bba8eac338c30d05407f">min_points_</a>;</div>
<div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;  max_points = <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac43989104e222a541c69e09673eab3ca">max_points_</a>;</div>
<div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_ac43989104e222a541c69e09673eab3ca"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#ac43989104e222a541c69e09673eab3ca">pcl::people::HeadBasedSubclustering::max_points_</a></div><div class="ttdeci">int max_points_</div><div class="ttdoc">maximum number of points for a person cluster</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.h:220</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a72bf26052718ca4445c2fc61db95abcb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a72bf26052718ca4445c2fc61db95abcb">&#9670;&nbsp;</a></span>getHeightLimits()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::getHeightLimits </td>
          <td>(</td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>min_height</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float &amp;&#160;</td>
          <td class="paramname"><em>max_height</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Get minimum and maximum allowed height for a person cluster. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[out]</td><td class="paramname">min_height</td><td>Minimum allowed height for a person cluster. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">max_height</td><td>Maximum allowed height for a person cluster. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;{</div>
<div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;  min_height = <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a5399168b9df777674d31fef1e28b538f">min_height_</a>;</div>
<div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;  max_height = <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac4575bf3342cb50d3e6706b5ee5b9954">max_height_</a>;</div>
<div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_a5399168b9df777674d31fef1e28b538f"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#a5399168b9df777674d31fef1e28b538f">pcl::people::HeadBasedSubclustering::min_height_</a></div><div class="ttdeci">float min_height_</div><div class="ttdoc">person clusters minimum height from the ground plane</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.h:210</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_ac4575bf3342cb50d3e6706b5ee5b9954"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#ac4575bf3342cb50d3e6706b5ee5b9954">pcl::people::HeadBasedSubclustering::max_height_</a></div><div class="ttdeci">float max_height_</div><div class="ttdoc">person clusters maximum height from the ground plane</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.h:207</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a694972594161a1d257c6131f8f0d406d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a694972594161a1d257c6131f8f0d406d">&#9670;&nbsp;</a></span>mergeClustersCloseInFloorCoordinates()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::mergeClustersCloseInFloorCoordinates </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; <a class="el" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>input_clusters</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; <a class="el" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>output_clusters</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Merge clusters close in floor coordinates. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">input_clusters</td><td>Input vector of <a class="el" href="classpcl_1_1people_1_1_person_cluster.html" title="PersonCluster represents a class for representing information about a cluster containing a person.">PersonCluster</a>. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">output_clusters</td><td>Output vector of <a class="el" href="classpcl_1_1people_1_1_person_cluster.html" title="PersonCluster represents a class for representing information about a cluster containing a person.">PersonCluster</a> (after merging). </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;{</div>
<div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;  <span class="keywordtype">float</span> min_distance_between_cluster_centers = 0.4;                   <span class="comment">// meters</span></div>
<div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;  <span class="keywordtype">float</span> normalize_factor = std::pow(<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac2de0af08516755f8f5f304269e15f62">sqrt_ground_coeffs_</a>, 2);          <span class="comment">// sqrt_ground_coeffs ^ 2 (precomputed for speed)</span></div>
<div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;  Eigen::Vector3f head_ground_coeffs = <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6d901849a17c155e7d31bf8c7f9f93fa">ground_coeffs_</a>.head(3);        <span class="comment">// ground plane normal (precomputed for speed)</span></div>
<div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;  std::vector &lt;std::vector&lt;int&gt; &gt; connected_clusters;</div>
<div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;  connected_clusters.resize(input_clusters.size());</div>
<div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;  std::vector&lt;bool&gt; used_clusters;          <span class="comment">// 0 in correspondence of clusters remained to process, 1 for already used clusters</span></div>
<div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;  used_clusters.resize(input_clusters.size());</div>
<div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; input_clusters.size(); i++)             <span class="comment">// for every cluster</span></div>
<div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;  {</div>
<div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    Eigen::Vector3f theoretical_center = input_clusters[i].getTCenter();</div>
<div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    <span class="keywordtype">float</span> t = theoretical_center.dot(head_ground_coeffs) / normalize_factor;    <span class="comment">// height from the ground</span></div>
<div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    Eigen::Vector3f current_cluster_center_projection = theoretical_center - head_ground_coeffs * t;    <span class="comment">// projection of the point on the groundplane</span></div>
<div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = i+1; j &lt; input_clusters.size(); j++)         <span class="comment">// for every remaining cluster</span></div>
<div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    {</div>
<div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;      theoretical_center = input_clusters[j].getTCenter();</div>
<div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;      <span class="keywordtype">float</span> t = theoretical_center.dot(head_ground_coeffs) / normalize_factor;    <span class="comment">// height from the ground</span></div>
<div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;      Eigen::Vector3f new_cluster_center_projection = theoretical_center - head_ground_coeffs * t;      <span class="comment">// projection of the point on the groundplane</span></div>
<div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;      <span class="keywordflow">if</span> (((new_cluster_center_projection - current_cluster_center_projection).norm()) &lt; min_distance_between_cluster_centers)</div>
<div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;      {</div>
<div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;        connected_clusters[i].push_back(j);</div>
<div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;      }</div>
<div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    }</div>
<div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;  }</div>
<div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160; </div>
<div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; connected_clusters.size(); i++)   <span class="comment">// for every cluster</span></div>
<div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;  {</div>
<div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="keywordflow">if</span> (!used_clusters[i])                                      <span class="comment">// if this cluster has not been used yet</span></div>
<div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    {</div>
<div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;      used_clusters[i] = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;      <span class="keywordflow">if</span> (connected_clusters[i].empty())                        <span class="comment">// no other clusters to merge</span></div>
<div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;      {</div>
<div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        output_clusters.push_back(input_clusters[i]);</div>
<div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;      }</div>
<div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;      <span class="keywordflow">else</span></div>
<div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;      {</div>
<div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;        <span class="comment">// Copy cluster points into new cluster:</span></div>
<div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;        <a class="code" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> point_indices;</div>
<div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;        point_indices = input_clusters[i].getIndices();</div>
<div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; connected_clusters[i].size(); j++)</div>
<div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        {</div>
<div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;          <span class="keywordflow">if</span> (!used_clusters[connected_clusters[i][j]])         <span class="comment">// if this cluster has not been used yet</span></div>
<div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;          {</div>
<div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;            used_clusters[connected_clusters[i][j]] = <span class="keyword">true</span>;</div>
<div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;            <span class="keywordflow">for</span>(std::vector&lt;int&gt;::const_iterator points_iterator = input_clusters[connected_clusters[i][j]].getIndices().indices.begin();</div>
<div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;                points_iterator != input_clusters[connected_clusters[i][j]].getIndices().indices.end(); points_iterator++)</div>
<div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;            {</div>
<div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;              point_indices.indices.push_back(*points_iterator);</div>
<div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;            }</div>
<div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;          }</div>
<div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;        }</div>
<div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        <a class="code" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster&lt;PointT&gt;</a> cluster(<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6b8c41b022b2e20451ba90374054ca6c">cloud_</a>, point_indices, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6d901849a17c155e7d31bf8c7f9f93fa">ground_coeffs_</a>, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac2de0af08516755f8f5f304269e15f62">sqrt_ground_coeffs_</a>, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a3cc53307aaca3043c210a89f0d17f032">head_centroid_</a>, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a0fbe5799f011ea769c2070c99a0c666c">vertical_</a>);</div>
<div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        output_clusters.push_back(cluster);</div>
<div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;      }</div>
<div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    }</div>
<div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;  }</div>
<div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    }</div>
</div><!-- fragment -->
</div>
</div>
<a id="a18856961bd00689c06e52384756d7a52"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a18856961bd00689c06e52384756d7a52">&#9670;&nbsp;</a></span>setDimensionLimits()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setDimensionLimits </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>min_points</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>max_points</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set minimum and maximum allowed number of points for a person cluster. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">min_points</td><td>Minimum allowed number of points for a person cluster. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">max_points</td><td>Maximum allowed number of points for a person cluster. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;{</div>
<div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#aaac17fa63ed4bba8eac338c30d05407f">min_points_</a> = min_points;</div>
<div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac43989104e222a541c69e09673eab3ca">max_points_</a> = max_points;</div>
<div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a041e2143e796e359353c798f16f8be8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a041e2143e796e359353c798f16f8be8d">&#9670;&nbsp;</a></span>setGround()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setGround </td>
          <td>(</td>
          <td class="paramtype">Eigen::VectorXf &amp;&#160;</td>
          <td class="paramname"><em>ground_coeffs</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set the ground coefficients. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">ground_coeffs</td><td>The ground plane coefficients. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;{</div>
<div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6d901849a17c155e7d31bf8c7f9f93fa">ground_coeffs_</a> = ground_coeffs;</div>
<div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac2de0af08516755f8f5f304269e15f62">sqrt_ground_coeffs_</a> = (ground_coeffs - Eigen::Vector4f(0.0f, 0.0f, 0.0f, ground_coeffs(3))).norm();</div>
<div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a2ffdbb2c984800cf6c30e42547e31c22"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2ffdbb2c984800cf6c30e42547e31c22">&#9670;&nbsp;</a></span>setHeadCentroid()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setHeadCentroid </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>head_centroid</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set head_centroid_ to true (person centroid is in the head) or false (person centroid is the whole body centroid). </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">head_centroid</td><td>Set the location of the person centroid (head or body center) (default = true). </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;{</div>
<div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a3cc53307aaca3043c210a89f0d17f032">head_centroid_</a> = head_centroid;</div>
<div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="abb32cbb48acaa44cd04ec25508e56ca9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abb32cbb48acaa44cd04ec25508e56ca9">&#9670;&nbsp;</a></span>setHeightLimits()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setHeightLimits </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>min_height</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>max_height</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set minimum and maximum allowed height for a person cluster. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">min_height</td><td>Minimum allowed height for a person cluster (default = 1.3). </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">max_height</td><td>Maximum allowed height for a person cluster (default = 2.3). </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;{</div>
<div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a5399168b9df777674d31fef1e28b538f">min_height_</a> = min_height;</div>
<div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac4575bf3342cb50d3e6706b5ee5b9954">max_height_</a> = max_height;</div>
<div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a84a55359a8ff3af4b51d663a4c017f45"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a84a55359a8ff3af4b51d663a4c017f45">&#9670;&nbsp;</a></span>setInitialClusters()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setInitialClusters </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; <a class="el" href="structpcl_1_1_point_indices.html">pcl::PointIndices</a> &gt; &amp;&#160;</td>
          <td class="paramname"><em>cluster_indices</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set initial cluster indices. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cluster_indices</td><td>Point cloud indices corresponding to the initial clusters (before subclustering). </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;{</div>
<div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a178c2cc808a240a4deaadf1d520f5231">cluster_indices_</a> = cluster_indices;</div>
<div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_a178c2cc808a240a4deaadf1d520f5231"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#a178c2cc808a240a4deaadf1d520f5231">pcl::people::HeadBasedSubclustering::cluster_indices_</a></div><div class="ttdeci">std::vector&lt; pcl::PointIndices &gt; cluster_indices_</div><div class="ttdoc">initial clusters indices</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.h:201</div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ad140bf587d64742ccf80863a31420584"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad140bf587d64742ccf80863a31420584">&#9670;&nbsp;</a></span>setInputCloud()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setInputCloud </td>
          <td>(</td>
          <td class="paramtype">PointCloudPtr &amp;&#160;</td>
          <td class="paramname"><em>cloud</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set input cloud. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">cloud</td><td>A pointer to the input point cloud. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;{</div>
<div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6b8c41b022b2e20451ba90374054ca6c">cloud_</a> = cloud;</div>
<div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a866c04c3f4cd3c955a5217a4684ea36b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a866c04c3f4cd3c955a5217a4684ea36b">&#9670;&nbsp;</a></span>setMinimumDistanceBetweenHeads()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setMinimumDistanceBetweenHeads </td>
          <td>(</td>
          <td class="paramtype">float&#160;</td>
          <td class="paramname"><em>heads_minimum_distance</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set minimum distance between persons' heads. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">heads_minimum_distance</td><td>Minimum allowed distance between persons' heads (default = 0.3). </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;{</div>
<div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#acdeeb51c8793c204939401f3cc11fbef">heads_minimum_distance_</a>= heads_minimum_distance;</div>
<div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="aa397dfa3d093b2a9f86b3957513b9d94"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa397dfa3d093b2a9f86b3957513b9d94">&#9670;&nbsp;</a></span>setSensorPortraitOrientation()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::setSensorPortraitOrientation </td>
          <td>(</td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>vertical</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set sensor orientation to landscape mode (false) or portrait mode (true). </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">vertical</td><td>Landscape (false) or portrait (true) mode (default = false). </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;{</div>
<div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a0fbe5799f011ea769c2070c99a0c666c">vertical_</a> = vertical;</div>
<div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;}</div>
</div><!-- fragment -->
</div>
</div>
<a id="a37e1d9543f43fc7c59fe3a795d01388e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a37e1d9543f43fc7c59fe3a795d01388e">&#9670;&nbsp;</a></span>subcluster()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename PointT &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">pcl::people::HeadBasedSubclustering</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt;::subcluster </td>
          <td>(</td>
          <td class="paramtype">std::vector&lt; <a class="el" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster</a>&lt; <a class="el" href="structpcl_1_1_point_x_y_z_r_g_b_a.html">PointT</a> &gt; &gt; &amp;&#160;</td>
          <td class="paramname"><em>clusters</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compute subclusters and return them into a vector of <a class="el" href="classpcl_1_1people_1_1_person_cluster.html" title="PersonCluster represents a class for representing information about a cluster containing a person.">PersonCluster</a>. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">clusters</td><td>Vector of <a class="el" href="classpcl_1_1people_1_1_person_cluster.html" title="PersonCluster represents a class for representing information about a cluster containing a person.">PersonCluster</a>. </td></tr>
  </table>
  </dd>
</dl>
<div class="fragment"><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;{</div>
<div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;  <span class="comment">// Check if all mandatory variables have been set:</span></div>
<div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac2de0af08516755f8f5f304269e15f62">sqrt_ground_coeffs_</a> != <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac2de0af08516755f8f5f304269e15f62">sqrt_ground_coeffs_</a>)</div>
<div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;  {</div>
<div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;    PCL_ERROR (<span class="stringliteral">&quot;[pcl::people::pcl::people::HeadBasedSubclustering::subcluster] Floor parameters have not been set or they are not valid!\n&quot;</span>);</div>
<div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;  }</div>
<div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a178c2cc808a240a4deaadf1d520f5231">cluster_indices_</a>.size() == 0)</div>
<div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;  {</div>
<div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;    PCL_ERROR (<span class="stringliteral">&quot;[pcl::people::pcl::people::HeadBasedSubclustering::subcluster] Cluster indices have not been set!\n&quot;</span>);</div>
<div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;  }</div>
<div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;  <span class="keywordflow">if</span> (<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6b8c41b022b2e20451ba90374054ca6c">cloud_</a> == NULL)</div>
<div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;  {</div>
<div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    PCL_ERROR (<span class="stringliteral">&quot;[pcl::people::pcl::people::HeadBasedSubclustering::subcluster] Input cloud has not been set!\n&quot;</span>);</div>
<div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;    <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;  }</div>
<div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160; </div>
<div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;  <span class="comment">// Person clusters creation from clusters indices:</span></div>
<div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;  <span class="keywordflow">for</span>(std::vector&lt;pcl::PointIndices&gt;::const_iterator it = <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a178c2cc808a240a4deaadf1d520f5231">cluster_indices_</a>.begin(); it != <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a178c2cc808a240a4deaadf1d520f5231">cluster_indices_</a>.end(); ++it)</div>
<div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;  {</div>
<div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    <a class="code" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster&lt;PointT&gt;</a> cluster(<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6b8c41b022b2e20451ba90374054ca6c">cloud_</a>, *it, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6d901849a17c155e7d31bf8c7f9f93fa">ground_coeffs_</a>, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac2de0af08516755f8f5f304269e15f62">sqrt_ground_coeffs_</a>, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a3cc53307aaca3043c210a89f0d17f032">head_centroid_</a>, <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a0fbe5799f011ea769c2070c99a0c666c">vertical_</a>);  <span class="comment">// PersonCluster creation</span></div>
<div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    clusters.push_back(cluster);</div>
<div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;  }</div>
<div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160; </div>
<div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;  <span class="comment">// Remove clusters with too high height from the ground plane:</span></div>
<div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;  std::vector&lt;pcl::people::PersonCluster&lt;PointT&gt; &gt; new_clusters;</div>
<div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;  <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; clusters.size(); i++)   <span class="comment">// for every cluster</span></div>
<div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;  {</div>
<div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    <span class="keywordflow">if</span> (clusters[i].getHeight() &lt;= <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac4575bf3342cb50d3e6706b5ee5b9954">max_height_</a>)</div>
<div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;      new_clusters.push_back(clusters[i]);</div>
<div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;  }</div>
<div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;  clusters = new_clusters;</div>
<div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;  new_clusters.clear();</div>
<div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160; </div>
<div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;  <span class="comment">// Merge clusters close in floor coordinates:</span></div>
<div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a694972594161a1d257c6131f8f0d406d">mergeClustersCloseInFloorCoordinates</a>(clusters, new_clusters);</div>
<div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;  clusters = new_clusters;</div>
<div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160; </div>
<div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;  std::vector&lt;pcl::people::PersonCluster&lt;PointT&gt; &gt; subclusters;</div>
<div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;  <span class="keywordtype">int</span> cluster_min_points_sub = int(<span class="keywordtype">float</span>(<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#aaac17fa63ed4bba8eac338c30d05407f">min_points_</a>) * 1.5);</div>
<div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;  <span class="comment">//  int cluster_max_points_sub = max_points_;</span></div>
<div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160; </div>
<div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;  <span class="comment">// create HeightMap2D object:</span></div>
<div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;  <a class="code" href="classpcl_1_1people_1_1_height_map2_d.html">pcl::people::HeightMap2D&lt;PointT&gt;</a> height_map_obj;</div>
<div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;  height_map_obj.<a class="code" href="classpcl_1_1people_1_1_height_map2_d.html#aa6d4ab7506cc5c2088db813aa7c9b009">setGround</a>(<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6d901849a17c155e7d31bf8c7f9f93fa">ground_coeffs_</a>);</div>
<div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;  height_map_obj.<a class="code" href="classpcl_1_1people_1_1_height_map2_d.html#a94cb420797b29aeedd1275f9cf884c2b">setInputCloud</a>(<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a6b8c41b022b2e20451ba90374054ca6c">cloud_</a>);</div>
<div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;  height_map_obj.<a class="code" href="classpcl_1_1people_1_1_height_map2_d.html#a9631039bfaa4068582015156c4cc74e7">setSensorPortraitOrientation</a>(<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a0fbe5799f011ea769c2070c99a0c666c">vertical_</a>);</div>
<div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;  height_map_obj.<a class="code" href="classpcl_1_1people_1_1_height_map2_d.html#acd6d90075dc41c9b445443e27dec6c64">setMinimumDistanceBetweenMaxima</a>(<a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#acdeeb51c8793c204939401f3cc11fbef">heads_minimum_distance_</a>);</div>
<div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;  <span class="keywordflow">for</span>(<span class="keyword">typename</span> std::vector&lt;<a class="code" href="classpcl_1_1people_1_1_person_cluster.html">pcl::people::PersonCluster&lt;PointT&gt;</a> &gt;::iterator it = clusters.begin(); it != clusters.end(); ++it)   <span class="comment">// for every cluster</span></div>
<div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;  {</div>
<div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="keywordtype">float</span> height = it-&gt;getHeight();</div>
<div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    <span class="keywordtype">int</span> number_of_points = it-&gt;getNumberPoints();</div>
<div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="keywordflow">if</span>(height &gt; <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#a5399168b9df777674d31fef1e28b538f">min_height_</a> &amp;&amp; height &lt; <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#ac4575bf3342cb50d3e6706b5ee5b9954">max_height_</a>)</div>
<div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    {</div>
<div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;      <span class="keywordflow">if</span> (number_of_points &gt; cluster_min_points_sub) <span class="comment">//  &amp;&amp; number_of_points &lt; cluster_max_points_sub)</span></div>
<div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;      {</div>
<div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;        <span class="comment">// Compute height map associated to the current cluster and its local maxima (heads):</span></div>
<div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;        height_map_obj.<a class="code" href="classpcl_1_1people_1_1_height_map2_d.html#ab9941599e003ecf088022bf6ceca9358">compute</a>(*it);</div>
<div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;        <span class="keywordflow">if</span> (height_map_obj.<a class="code" href="classpcl_1_1people_1_1_height_map2_d.html#a96d4d813f2307acb6a1442f54357c625">getMaximaNumberAfterFiltering</a>() &gt; 1)        <span class="comment">// if more than one maximum</span></div>
<div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;        {</div>
<div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;          <span class="comment">// create new clusters from the current cluster and put corresponding indices into sub_clusters_indices:</span></div>
<div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;          <a class="code" href="classpcl_1_1people_1_1_head_based_subclustering.html#acdaf7000869d27494d9e1a5573e2cb49">createSubClusters</a>(*it, height_map_obj.<a class="code" href="classpcl_1_1people_1_1_height_map2_d.html#a96d4d813f2307acb6a1442f54357c625">getMaximaNumberAfterFiltering</a>(), height_map_obj.<a class="code" href="classpcl_1_1people_1_1_height_map2_d.html#a61f73b3dc7139567b6fb222f7d51119d">getMaximaCloudIndicesFiltered</a>(), subclusters);</div>
<div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;        }</div>
<div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;        <span class="keywordflow">else</span></div>
<div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        {  <span class="comment">// Only one maximum --&gt; copy original cluster:</span></div>
<div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;          subclusters.push_back(*it);</div>
<div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;        }</div>
<div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;      }</div>
<div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;      <span class="keywordflow">else</span></div>
<div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;      {</div>
<div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        <span class="comment">// Cluster properties not good for sub-clustering --&gt; copy original cluster:</span></div>
<div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;        subclusters.push_back(*it);</div>
<div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;      }</div>
<div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    }</div>
<div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;  }</div>
<div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;  clusters = subclusters;    <span class="comment">// substitute clusters with subclusters</span></div>
<div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;}</div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_a694972594161a1d257c6131f8f0d406d"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#a694972594161a1d257c6131f8f0d406d">pcl::people::HeadBasedSubclustering::mergeClustersCloseInFloorCoordinates</a></div><div class="ttdeci">void mergeClustersCloseInFloorCoordinates(std::vector&lt; pcl::people::PersonCluster&lt; PointT &gt; &gt; &amp;input_clusters, std::vector&lt; pcl::people::PersonCluster&lt; PointT &gt; &gt; &amp;output_clusters)</div><div class="ttdoc">Merge clusters close in floor coordinates.</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.hpp:134</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_head_based_subclustering_html_acdaf7000869d27494d9e1a5573e2cb49"><div class="ttname"><a href="classpcl_1_1people_1_1_head_based_subclustering.html#acdaf7000869d27494d9e1a5573e2cb49">pcl::people::HeadBasedSubclustering::createSubClusters</a></div><div class="ttdeci">void createSubClusters(pcl::people::PersonCluster&lt; PointT &gt; &amp;cluster, int maxima_number_after_filtering, std::vector&lt; int &gt; &amp;maxima_cloud_indices_filtered, std::vector&lt; pcl::people::PersonCluster&lt; PointT &gt; &gt; &amp;subclusters)</div><div class="ttdoc">Create subclusters centered on the heads position from the current cluster.</div><div class="ttdef"><b>Definition:</b> head_based_subcluster.hpp:195</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_height_map2_d_html"><div class="ttname"><a href="classpcl_1_1people_1_1_height_map2_d.html">pcl::people::HeightMap2D</a></div><div class="ttdoc">HeightMap2D represents a class for creating a 2D height map from a point cloud and searching for its ...</div><div class="ttdef"><b>Definition:</b> height_map_2d.h:59</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_height_map2_d_html_a61f73b3dc7139567b6fb222f7d51119d"><div class="ttname"><a href="classpcl_1_1people_1_1_height_map2_d.html#a61f73b3dc7139567b6fb222f7d51119d">pcl::people::HeightMap2D::getMaximaCloudIndicesFiltered</a></div><div class="ttdeci">std::vector&lt; int &gt; &amp; getMaximaCloudIndicesFiltered()</div><div class="ttdoc">Return the point cloud indices corresponding to the maxima computed after the filterMaxima method.</div><div class="ttdef"><b>Definition:</b> height_map_2d.hpp:303</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_height_map2_d_html_a94cb420797b29aeedd1275f9cf884c2b"><div class="ttname"><a href="classpcl_1_1people_1_1_height_map2_d.html#a94cb420797b29aeedd1275f9cf884c2b">pcl::people::HeightMap2D::setInputCloud</a></div><div class="ttdeci">void setInputCloud(PointCloudPtr &amp;cloud)</div><div class="ttdoc">Set initial cluster indices.</div><div class="ttdef"><b>Definition:</b> height_map_2d.hpp:248</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_height_map2_d_html_a9631039bfaa4068582015156c4cc74e7"><div class="ttname"><a href="classpcl_1_1people_1_1_height_map2_d.html#a9631039bfaa4068582015156c4cc74e7">pcl::people::HeightMap2D::setSensorPortraitOrientation</a></div><div class="ttdeci">void setSensorPortraitOrientation(bool vertical)</div><div class="ttdoc">Set sensor orientation to landscape mode (false) or portrait mode (true).</div><div class="ttdef"><b>Definition:</b> height_map_2d.hpp:273</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_height_map2_d_html_a96d4d813f2307acb6a1442f54357c625"><div class="ttname"><a href="classpcl_1_1people_1_1_height_map2_d.html#a96d4d813f2307acb6a1442f54357c625">pcl::people::HeightMap2D::getMaximaNumberAfterFiltering</a></div><div class="ttdeci">int &amp; getMaximaNumberAfterFiltering()</div><div class="ttdoc">Return the maxima number after the filterMaxima method.</div><div class="ttdef"><b>Definition:</b> height_map_2d.hpp:297</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_height_map2_d_html_aa6d4ab7506cc5c2088db813aa7c9b009"><div class="ttname"><a href="classpcl_1_1people_1_1_height_map2_d.html#aa6d4ab7506cc5c2088db813aa7c9b009">pcl::people::HeightMap2D::setGround</a></div><div class="ttdeci">void setGround(Eigen::VectorXf &amp;ground_coeffs)</div><div class="ttdoc">Set the ground coefficients.</div><div class="ttdef"><b>Definition:</b> height_map_2d.hpp:254</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_height_map2_d_html_ab9941599e003ecf088022bf6ceca9358"><div class="ttname"><a href="classpcl_1_1people_1_1_height_map2_d.html#ab9941599e003ecf088022bf6ceca9358">pcl::people::HeightMap2D::compute</a></div><div class="ttdeci">void compute(pcl::people::PersonCluster&lt; PointT &gt; &amp;cluster)</div><div class="ttdoc">Compute the height map with the projection of cluster points onto the ground plane.</div><div class="ttdef"><b>Definition:</b> height_map_2d.hpp:59</div></div>
<div class="ttc" id="aclasspcl_1_1people_1_1_height_map2_d_html_acd6d90075dc41c9b445443e27dec6c64"><div class="ttname"><a href="classpcl_1_1people_1_1_height_map2_d.html#acd6d90075dc41c9b445443e27dec6c64">pcl::people::HeightMap2D::setMinimumDistanceBetweenMaxima</a></div><div class="ttdeci">void setMinimumDistanceBetweenMaxima(float minimum_distance_between_maxima)</div><div class="ttdoc">Set minimum distance between maxima.</div><div class="ttdef"><b>Definition:</b> height_map_2d.hpp:267</div></div>
</div><!-- fragment -->
</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>people/include/pcl/people/<a class="el" href="head__based__subcluster_8h_source.html">head_based_subcluster.h</a></li>
<li>people/include/pcl/people/impl/<a class="el" href="head__based__subcluster_8hpp_source.html">head_based_subcluster.hpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><b>people</b></li><li class="navelem"><a class="el" href="classpcl_1_1people_1_1_head_based_subclustering.html">HeadBasedSubclustering</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
